#!/usr/bin/env perl
# /Users.pm/
# Users模块 定义用户名、密码
# 2016.08.23

package MyApp::Model::Users;

use strict;
use warnings;
use utf8;

my $USERS = { #存储用户名和密码的键值对
  joel => 'las3rs',
  marcus => 'lu1z',
  sebastian => 'secr3t',
};

# ? 这里不太明白 只知道是 my $self = {};my $class=shift;bless $self,$class 的简写?
# bless后第一个参数为ref变量，第二个参数为类名
# 因为perl类包的构造器sub new{}自动转换为 new('包名/类名')所以这里用shift取函数的类名
# 但是ref变量为什么用{}匿名哈希，不太明白
# 这句就是一个构造器
sub new { bless {}, shift}

# check为验证密码和用户名是否匹配的方法
sub check {
  # 第一句把 check的参数赋给了$self,$user,$pass三个标量
  # $self很显然是Users当前实例
  # $user是从外部取得的用户名param
  # $pass是从外部取得的密码param
  my ($self, $user, $pass) = @_;
  # 返回1 如果 当前实例的$USERS(哈希引用，内置数据)存在{$user}这个键的值
  # 并且 这个键值等于 $pass这个外部param
  return 1 if $USERS->{$user} && $USERS->{$user} eq $pass; # 验证成功！
  # 以上两个条件任一为假
  return undef ; # 验证失败！
}
1;# 这是什么意思?类的返回值？
